<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // 原型(prototype):对象构成时所参考的模板
        function Student(name){
            this.name=name;
        }

        //向原型对象中添加方法
        Student.prototype.sayHello=function(){
            console.log("hello");
        };
        var stu=new Student("alice");
        var stu2=new Student("ddd");
        stu.sayHello();
        stu2.sayHello();
        console.log(stu.__proto__);
        console.log(Student.prototype);
        

        //js中最高原型指向于Object.prototype
        // js中一个数据的原型的连续的关系称为原型链

        // stu--->Student.prototype--->Object.prototype--->null
        console.log(stu.__proto__===Student.prototype);
        console.log(Student.prototype.__proto__===Object.prototype);
        console.log(Object.prototype.__proto__);

        // ES6中规定__proto__是一个非标准属性
        // ES6中提供了标准方法，用于替代__proto__所实现的功能
        // Object.setPrototypeOf(对象,prototype)  Object.getPrototypeOf(对象)

        Object.setPrototypeOf(stu,{
            type:"测试",
            test:function(){
                console.log("哈哈哈");
            }
        });
        console.log(stu);
        console.log(Object.getPrototypeOf(stu));//获取对象所对应的原型对象

    </script>
</head>
<body>
    
</body>
</html>